/*
 * MockMiddlewareIO.cpp
 *
 *  Created on: 19/02/2010
 *      Author: San Martín, Matías I.
 */

#include "MockMiddlewareIO.h"
#include "../../../Aplicacion/Common/Mensajes/DatosMensajeFactory.h"
#include "../../../Aplicacion/Common/Mensajes/MensajeAplicacion.h"

#include <iostream>
#include <sstream>

using namespace std;
using namespace aplicacion;

MockMiddlewareIO::MockMiddlewareIO(IdPlaneta destino)
	: _msj(0),
	  _destino(destino)
{
}

MockMiddlewareIO::~MockMiddlewareIO() {
}

bool MockMiddlewareIO::send(void* datos, Longitud ldatos, Direccion destino)
{
	stringstream stm;
	stm << "Mensaje para destino (" << (int)destino << "): ";
	stm.write((char*)datos,ldatos);
	cout << stm.str() << endl;
	return true;
}

bool MockMiddlewareIO::recv(void* datos)
{
	sleep(1); //agrego un retardo a la recepcion
	if (_msj < CANT_MSJS)
	{
		MensajeAplicacion msj;
		DatosMensaje* datosMsj = this->getDatos(_msj);

		IdJuego juego(1);
		IdJugador jugador(99,juego);

		msj.getEncabezado().setOrigen(jugador);
		msj.getEncabezado().setDestino(this->getDestino());
		msj.getEncabezado().setTipo(datosMsj->getTipo());
		msj.setDatos(datosMsj);

		msj.saveToArray(reinterpret_cast<uint8_t*>(datos));

		_msj = ++_msj;// % CANT_MSJS;
		return true;
	}else{
		return false;
	}
}

DatosMensaje* MockMiddlewareIO::getDatos(unsigned i)
{
	DatosMensaje* retDatos = NULL;
	switch (i) {
		case 0:
		{
			DatosCambiaDuenio* datos = DatosMensajeFactorySingleton::instance().createCambiaDuenio();

			IdJuego juego(4);
			IdJugador jugador(6,juego);
			datos->_duenioNuevo = jugador;
			retDatos = datos;
			break;
		}
	}
	return retDatos;
}

IdPlaneta MockMiddlewareIO::getDestino()
{
	return _destino;
}
